0x608060405234801562000010575f80fd5b506200001b62000021565b620000d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d25780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6142ad80620000e35f395ff3fe608060405234801561000f575f80fd5b5060043610610283575f3560e01c80636352211e1161015757806395d89b41116100d2578063b88d4fde11610088578063c87b56dd1161006e578063c87b56dd1461065e578063d547741f14610671578063e985e9c514610684575f80fd5b8063b88d4fde14610638578063c3cda5201461064b575f80fd5b8063a1ebf35d116100b8578063a1ebf35d146105f7578063a217fddf1461061e578063a22cb46514610625575f80fd5b806395d89b41146105dc5780639ab24eb0146105e4575f80fd5b80638456cb59116101275780638e539e8c1161010d5780638e539e8c1461054657806391d148541461055957806391ddadf4146105bd575f80fd5b80638456cb591461052357806384b0196e1461052b575f80fd5b80636352211e146104a157806370a08231146104b45780637ecebe00146104c75780638129fc1c1461051b575f80fd5b806330be79be116102015780634bf5d7e9116101b7578063587cde1e1161019d578063587cde1e1461040d5780635c19a95c146104645780635c975abb14610477575f80fd5b80634bf5d7e9146103f25780634f6ccce7146103fa575f80fd5b80633a46b1a8116101e75780633a46b1a8146103c45780633f4ba83a146103d757806342842e0e146103df575f80fd5b806330be79be1461039e57806336568abe146103b1575f80fd5b806318160ddd11610256578063248a9ca31161023c578063248a9ca3146103375780632f2ff15d146103785780632f745c591461038b575f80fd5b806318160ddd1461031157806323b872dd14610324575f80fd5b806301ffc9a71461028757806306fdde03146102af578063081812fc146102c4578063095ea7b3146102fc575b5f80fd5b61029a610295366004613a09565b6106cd565b60405190151581526020015b60405180910390f35b6102b76106dd565b6040516102a69190613a8f565b6102d76102d2366004613aa1565b610773565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b61030f61030a366004613ae0565b6107a8565b005b6104ec545b6040519081526020016102a6565b61030f610332366004613b08565b6107b7565b610316610345366004613aa1565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b61030f610386366004613b41565b6108ab565b610316610399366004613ae0565b6108ee565b61030f6103ac366004613b7b565b610987565b61030f6103bf366004613b41565b610ad5565b6103166103d2366004613ae0565b610b33565b61030f610c0f565b61030f6103ed366004613b08565b610c24565b6102b7610c3e565b610316610408366004613aa1565b610ccf565b6102d761041b366004613bbe565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0060205260409020541690565b61030f610472366004613bbe565b610d44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661029a565b6102d76104af366004613aa1565b610d4f565b6103166104c2366004613bbe565b610d59565b6103166104d5366004613bbe565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b61030f610dd9565b61030f61115a565b61053361116c565b6040516102a69796959493929190613bd7565b610316610554366004613aa1565b611266565b61029a610567366004613b41565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6105c561131f565b60405165ffffffffffff90911681526020016102a6565b6102b761132d565b6103166105f2366004613bbe565b611342565b6103167fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7081565b6103165f81565b61030f610633366004613c97565b6113d3565b61030f610646366004613cfd565b6113de565b61030f610659366004613df0565b6113f5565b6102b761066c366004613aa1565b6114ce565b61030f61067f366004613b41565b611533565b61029a610692366004613e44565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081526104b76020908152604080832093909416825291909152205460ff1690565b5f6106d782611576565b92915050565b6104b280546060919081906106f190613e6c565b80601f016020809104026020016040519081016040528092919081815260200182805461071d90613e6c565b80156107685780601f1061073f57610100808354040283529160200191610768565b820191905f5260205f20905b81548152906001019060200180831161074b57829003601f168201915b505050505091505090565b5f61077d826115cb565b505f8281526104b5602052604090205473ffffffffffffffffffffffffffffffffffffffff166106d7565b6107b382823361162a565b5050565b73ffffffffffffffffffffffffffffffffffffffff821661080b576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f610817838333611637565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108a5576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610802565b50505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108e48161164b565b6108a58383611655565b5f6104ea6108fb84610d59565b8310610952576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101849052604401610802565b73ffffffffffffffffffffffffffffffffffffffff84165f908152602091825260408082208583529092522054905092915050565b61098f61177a565b42841161099a575f80fd5b6040517fffffffffffffffff0000000000000000000000000000000000000000000000004660c01b166020820152602881018690527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166048820152605c81018590525f90607c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f80855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610a8c573d5f803e3d5ffd5b505050602060405103519050610ac27fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70826117d8565b610acc338861187e565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b24576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2e828261192b565b505050565b5f7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0081610b5e61131f565b90508065ffffffffffff168410610bb2576040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004810185905265ffffffffffff82166024820152604401610802565b610bea610bbe85611a07565b73ffffffffffffffffffffffffffffffffffffffff87165f908152600185016020526040902090611a56565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b5f610c198161164b565b610c21611b1c565b50565b610b2e83838360405180602001604052805f8152506113de565b6060610c48611bb9565b65ffffffffffff16610c5861131f565b65ffffffffffff1614610c97576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b5f6104ea610cdd6104ec5490565b8310610d1e576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081525f600482015260248101849052604401610802565b806002018381548110610d3357610d33613ebd565b905f5260205f200154915050919050565b336107b38183611bc3565b5f6106d7826115cb565b5f6104b273ffffffffffffffffffffffffffffffffffffffff8316610dac576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f6004820152602401610802565b73ffffffffffffffffffffffffffffffffffffffff9092165f908152600490920160205250604090205490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610e235750825b90505f8267ffffffffffffffff166001148015610e3f5750303b155b905081158015610e4d575080155b15610e84576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ee55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f6103e8555f61041b555f610520555f610521555f7f6c13f748a311738bbf2d382afcbfb02bafc4711115bbe7e4ba24e9ca64164b2f555f7f80852d70952ccdfeda87a7d99ebe3b3c986c94abe19abe73fe4924da10294d5a555f7f90f100b63a1325dabad3e3abc6082590623f7ae48b7c78135e87fe54dafed961555f7fad12e564ba2ae80c469990ede53f5ff3a2b2175d5dda4f31e4bbec5307fcd429555f7f81f6ceae9a0b6a456e639b7557ba79b9de2f2c9d82ed8ead969a8f86fdd6d163555f7f0cb14b4a6b81e29a81ce5af5eb9f638675d777d179f403656f63cdb23ca571655561103f6040518060400160405280600e81526020017f53706865726f69642053504143450000000000000000000000000000000000008152506040518060400160405280600581526020017f5350414345000000000000000000000000000000000000000000000000000000815250611cc6565b611047611cd8565b61104f611ce0565b611057611cd8565b6110cb6040518060400160405280600e81526020017f53706865726f69642053504143450000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250611cf0565b6110d3611cd8565b6110f15f7333bed6737e4c97b0e40041248b51faab137e4ca0611655565b5083156111535784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f6111648161164b565b610c21611d02565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10080549091501580156111aa57506001810154155b611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610802565b611218611d7b565b611220611dcc565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b5f7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d008161129161131f565b90508065ffffffffffff1684106112e5576040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004810185905265ffffffffffff82166024820152604401610802565b6112fb6112f185611a07565b6002840190611a56565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16949350505050565b5f611328611bb9565b905090565b6104b380546060916104b2916106f190613e6c565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081207fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d00906113b090611e1d565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b6107b3338383611e6a565b6113e98484846107b7565b6108a584848484611f6c565b83421115611432576040517f4683af0e00000000000000000000000000000000000000000000000000000000815260048101859052602401610802565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff88169181019190915260608101869052608081018590525f906114b8906114b09060a00160405160208183030381529060405280519060200120612159565b8585856121a0565b90506114c481876121cc565b610acc8188611bc3565b60606114d9826115cb565b505f6114e3612270565b90505f8151116115015760405180602001604052805f81525061152c565b8061150b84612290565b60405160200161151c929190613eea565b6040516020818303038152906040525b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461156c8161164b565b6108a5838361192b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106d757506106d78261234c565b5f8181526104b4602052604081205473ffffffffffffffffffffffffffffffffffffffff16806106d7576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610802565b610b2e83838360016123a1565b5f61164384848461256e565b949350505050565b610c2181336117d8565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1661176a575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556117063390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106d7565b5f9150506106d7565b5092915050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156117d6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166107b3576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610802565b73ffffffffffffffffffffffffffffffffffffffff82166118cd576040517f64a0ae920000000000000000000000000000000000000000000000000000000081525f6004820152602401610802565b5f6118d983835f611637565b905073ffffffffffffffffffffffffffffffffffffffff811615610b2e576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610802565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff161561176a575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106d7565b5f65ffffffffffff821115611a52576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526030600482015260248101839052604401610802565b5090565b81545f9081816005811115611ab2575f611a6f84612589565b611a799085613f45565b5f8881526020902090915081015465ffffffffffff9081169087161015611aa257809150611ab0565b611aad816001613f58565b92505b505b5f611abf8787858561266d565b90508015611b0f57611ae387611ad6600184613f45565b5f91825260209091200190565b546601000000000000900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611b11565b5f5b979650505050505050565b611b246126cc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b5f61132843611a07565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d005f611c328473ffffffffffffffffffffffffffffffffffffffff9081165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0060205260409020541690565b73ffffffffffffffffffffffffffffffffffffffff8581165f8181526020869052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46108a58184611cc187612727565b612731565b611cce612961565b6107b382826129c8565b6117d6612961565b611ce8612961565b6117d66129ed565b611cf8612961565b6107b38282612a3e565b611d0a61177a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b8e565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916106f190613e6c565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916106f190613e6c565b80545f908015611e6257611e3683611ad6600184613f45565b546601000000000000900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661152c565b5f9392505050565b6104b273ffffffffffffffffffffffffffffffffffffffff8316611ed2576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610802565b73ffffffffffffffffffffffffffffffffffffffff8481165f81815260058401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83163b156108a5576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290611fe1903390889087908790600401613f6b565b6020604051808303815f875af1925050508015612039575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261203691810190613fb3565b60015b6120c6573d808015612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5080515f036120be576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610802565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611153576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610802565b5f6106d7612165612ab0565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f806121b088888888612ab9565b9250925092506121c08282612bac565b50909695505050505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114610b2e576040517f752d88c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604401610802565b606060405180606001604052806024815260200161425460249139905090565b60605f61229c83612caf565b60010190505f8167ffffffffffffffff8111156122bb576122bb613cd0565b6040519080825280601f01601f1916602001820160405280156122e5576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846122ef57509392505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806106d757506106d782612d90565b6104b281806123c5575073ffffffffffffffffffffffffffffffffffffffff831615155b15612519575f6123d4856115cb565b905073ffffffffffffffffffffffffffffffffffffffff84161580159061242757508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612466575073ffffffffffffffffffffffffffffffffffffffff8082165f9081526104b7602090815260408083209388168352929052205460ff16155b156124b5576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610802565b821561251757848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5f93845260030160205250506040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f8061257b858585612e72565b905061164381866001612e86565b5f815f0361259857505f919050565b5f60016125a484612f66565b901c6001901b905060018184816125bd576125bd613fce565b048201901c905060018184816125d5576125d5613fce565b048201901c905060018184816125ed576125ed613fce565b048201901c9050600181848161260557612605613fce565b048201901c9050600181848161261d5761261d613fce565b048201901c9050600181848161263557612635613fce565b048201901c9050600181848161264d5761264d613fce565b048201901c905061152c8182858161266757612667613fce565b04612ff9565b5f5b818310156126c4575f612682848461300e565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff1611156126b0578092506126be565b6126bb816001613f58565b93505b5061266f565b509392505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166117d6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6106d782610d59565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0073ffffffffffffffffffffffffffffffffffffffff8481169084161480159061277a57505f82115b156108a55773ffffffffffffffffffffffffffffffffffffffff8416156128705773ffffffffffffffffffffffffffffffffffffffff84165f908152600182016020526040812081906127d8906130286127d387613033565b613092565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508573ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612865929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff8316156108a55773ffffffffffffffffffffffffffffffffffffffff83165f908152600182016020526040812081906128c4906130ca6127d387613033565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612951929190918252602082015260400190565b60405180910390a2505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166117d6576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129d0612961565b6104b2806129de848261403f565b50600181016108a5838261403f565b6129f5612961565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612a46612961565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102612a92848261403f565b5060038101612aa1838261403f565b505f8082556001909101555050565b5f6113286130d5565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612af257505f91506003905082612ba2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612b43573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9957505f925060019150829050612ba2565b92505f91508190505b9450945094915050565b5f826003811115612bbf57612bbf61415b565b03612bc8575050565b6001826003811115612bdc57612bdc61415b565b03612c13576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612c2757612c2761415b565b03612c61576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610802565b6003826003811115612c7557612c7561415b565b036107b3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610802565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612cf7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612d23576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612d4157662386f26fc10000830492506010015b6305f5e1008310612d59576305f5e100830492506008015b6127108310612d6d57612710830492506004015b60648310612d7f576064830492506002015b600a83106106d75760010192915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612e2257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806106d757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106d7565b5f612e7b61177a565b611643848484613148565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0073ffffffffffffffffffffffffffffffffffffffff8416612ed857612ed5816002016130ca6127d385613033565b50505b73ffffffffffffffffffffffffffffffffffffffff8316612f0957612f06816002016130286127d385613033565b50505b73ffffffffffffffffffffffffffffffffffffffff8481165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0060205260408082205486841683529120546108a592918216911684612731565b5f80608083901c15612f7a57608092831c92015b604083901c15612f8c57604092831c92015b602083901c15612f9e57602092831c92015b601083901c15612fb057601092831c92015b600883901c15612fc257600892831c92015b600483901c15612fd457600492831c92015b600283901c15612fe657600292831c92015b600183901c156106d75760010192915050565b5f818310613007578161152c565b5090919050565b5f61301c6002848418614188565b61152c90848416613f58565b5f61152c82846141c0565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff821115611a52576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260d0600482015260248101839052604401610802565b5f806130bd61309f61131f565b6130b56130ab88611e1d565b868863ffffffff16565b879190613263565b915091505b935093915050565b5f61152c82846141f3565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6130ff613270565b6131076132eb565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f80613155858585613340565b905073ffffffffffffffffffffffffffffffffffffffff81166131c0576131bb846104ec80545f8381526104ed60205260408120829055600182018355919091527f20bc42a272e69e0373bb0441ce625a3a4b1f1dff9bdc93ac74b9009820c3daad0155565b6131fd565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131fd576131fd81856134c3565b73ffffffffffffffffffffffffffffffffffffffff85166132265761322184613571565b611643565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611643576116438585613628565b5f806130bd858585613682565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161329b611d7b565b8051909150156132b357805160209091012092915050565b815480156132c2579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10081613316611dcc565b80519091501561332e57805160209091012092915050565b600182015480156132c2579392505050565b5f8281526104b460205260408120546104b29073ffffffffffffffffffffffffffffffffffffffff9081169084161561337e5761337e818587613869565b73ffffffffffffffffffffffffffffffffffffffff8116156133f3576133a65f865f806123a1565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600483016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff86161561343d5773ffffffffffffffffffffffffffffffffffffffff86165f9081526004830160205260409020805460010190555b5f85815260028301602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925591518893918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a495945050505050565b6104ea5f6134d084610d59565b5f8481526001840160205260409020549091508082146135305773ffffffffffffffffffffffffffffffffffffffff85165f9081526020848152604080832085845282528083205484845281842081905583526001860190915290208190555b505f928352600182016020908152604080852085905573ffffffffffffffffffffffffffffffffffffffff9095168452918252838320908352905290812055565b6104ec546104ea905f9061358790600190613f45565b5f8481526003840160205260408120546002850180549394509092849081106135b2576135b2613ebd565b905f5260205f2001549050808460020183815481106135d3576135d3613ebd565b5f9182526020808320909101929092558281526003860190915260408082208490558682528120556002840180548061360e5761360e614226565b600190038181905f5260205f20015f905590555050505050565b6104ea5f600161363785610d59565b6136419190613f45565b73ffffffffffffffffffffffffffffffffffffffff9094165f9081526020838152604080832087845282528083208690559482526001909301909252502055565b82545f90819080156137f9575f61369e87611ad6600185613f45565b60408051808201909152905465ffffffffffff808216808452660100000000000090920479ffffffffffffffffffffffffffffffffffffffffffffffffffff1660208401529192509087161015613721576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805165ffffffffffff808816911603613783578461374488611ad6600186613f45565b805479ffffffffffffffffffffffffffffffffffffffffffffffffffff9290921666010000000000000265ffffffffffff9092169190911790556137e9565b6040805180820190915265ffffffffffff808816825279ffffffffffffffffffffffffffffffffffffffffffffffffffff80881660208085019182528b54600181018d555f8d815291909120945191519092166601000000000000029216919091179101555b6020015192508391506130c29050565b50506040805180820190915265ffffffffffff808516825279ffffffffffffffffffffffffffffffffffffffffffffffffffff80851660208085019182528854600181018a555f8a81529182209551925190931666010000000000000291909316179201919091559050816130c2565b613874838383613919565b610b2e5773ffffffffffffffffffffffffffffffffffffffff83166138c8576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610802565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610802565b5f73ffffffffffffffffffffffffffffffffffffffff83161580159061164357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806139a6575073ffffffffffffffffffffffffffffffffffffffff8085165f9081526104b7602090815260408083209387168352929052205460ff165b806116435750505f9081526104b5602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610c21575f80fd5b5f60208284031215613a19575f80fd5b813561152c816139dc565b5f5b83811015613a3e578181015183820152602001613a26565b50505f910152565b5f8151808452613a5d816020860160208601613a24565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f61152c6020830184613a46565b5f60208284031215613ab1575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613adb575f80fd5b919050565b5f8060408385031215613af1575f80fd5b613afa83613ab8565b946020939093013593505050565b5f805f60608486031215613b1a575f80fd5b613b2384613ab8565b9250613b3160208501613ab8565b9150604084013590509250925092565b5f8060408385031215613b52575f80fd5b82359150613b6260208401613ab8565b90509250929050565b803560ff81168114613adb575f80fd5b5f805f805f60a08688031215613b8f575f80fd5b8535945060208601359350613ba660408701613b6b565b94979396509394606081013594506080013592915050565b5f60208284031215613bce575f80fd5b61152c82613ab8565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e06020840152613c1360e084018a613a46565b8381036040850152613c25818a613a46565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015613c8557835183529284019291840191600101613c69565b50909c9b505050505050505050505050565b5f8060408385031215613ca8575f80fd5b613cb183613ab8565b915060208301358015158114613cc5575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f805f8060808587031215613d10575f80fd5b613d1985613ab8565b9350613d2760208601613ab8565b925060408501359150606085013567ffffffffffffffff80821115613d4a575f80fd5b818701915087601f830112613d5d575f80fd5b813581811115613d6f57613d6f613cd0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715613db557613db5613cd0565b816040528281528a6020848701011115613dcd575f80fd5b826020860160208301375f60208483010152809550505050505092959194509250565b5f805f805f8060c08789031215613e05575f80fd5b613e0e87613ab8565b95506020870135945060408701359350613e2a60608801613b6b565b92506080870135915060a087013590509295509295509295565b5f8060408385031215613e55575f80fd5b613e5e83613ab8565b9150613b6260208401613ab8565b600181811c90821680613e8057607f821691505b602082108103613eb7577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8351613efb818460208801613a24565b835190830190613f0f818360208801613a24565b01949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156106d7576106d7613f18565b808201808211156106d7576106d7613f18565b5f73ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613fa96080830184613a46565b9695505050505050565b5f60208284031215613fc3575f80fd5b815161152c816139dc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b601f821115610b2e57805f5260205f20601f840160051c810160208510156140205750805b601f840160051c820191505b81811015611153575f815560010161402c565b815167ffffffffffffffff81111561405957614059613cd0565b61406d816140678454613e6c565b84613ffb565b602080601f8311600181146140bf575f84156140895750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614153565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561410b578886015182559484019460019091019084016140ec565b508582101561414757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f826141bb577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821603908082111561177357611773613f18565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff81811683821601908082111561177357611773613f18565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfe68747470733a2f2f7370616365732d6d657461646174612e73706865726f69642e696f2fa2646970667358221220d728956c3c049323bee22db08c31a0641180228927d8491e91662ff8522f896264736f6c63430008170033